﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace Formation_Entreprise
{
    /// <summary>
    /// La classe AccesTableUsager contient toutes les méthodes
    /// d'accès pour la table Usager
    /// </summary>
    class AccesTableUsager
    {
        //***********************//
        //Valider si login est OK//
        //***********************//
        public static bool CheckLogin(string id, string pass)
        {
            bool Valeur = false;

            //requete à utiliser
            string query = "SELECT [ID], [Password] FROM Usager WHERE [ID]=? AND [Password]=?";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //initialisation du reader
            OleDbDataReader reader = null;

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("ID", id);
            oledbcmd.Parameters.AddWithValue("Password", pass);
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete retour si le login est bon ou pas
                reader = oledbcmd.ExecuteReader();
                if (reader.Read())
                    Valeur = true;
                else
                    Valeur = false;
            }
            catch (OleDbException ex) { throw ex; }

            //Fermeture du reader et fermeture de la conection à la base de donnée
            reader.Close();
            oledbcn.Close();

            //return faux si entrée pas trouvé
            return Valeur;
        }


        //*****************//
        //Ajouter un usager//
        //*****************//
        public static int AjouterUsager(objUsager usager)
        {
            //requete à utiliser avec les données donnés en params
            string query = "INSERT INTO [Usager] ([ID],[Nom],[Password],[AdresseCouriel],[PasswordCouriel],[Admin]) VALUES (@p1,@p2,@p3,@p4,@p5,@p6)";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", usager.ID);
            oledbcmd.Parameters.AddWithValue("@p2", usager.Nom);
            oledbcmd.Parameters.AddWithValue("@p3", usager.MotdePasse);
            oledbcmd.Parameters.AddWithValue("@p4", usager.AddresseCouriel);
            oledbcmd.Parameters.AddWithValue("@p5", usager.MotdePasseCouriel);
            oledbcmd.Parameters.AddWithValue("@p6", usager.Admin);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Ajout de l'usager          
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //******************//
        //Modifier un usager//
        //******************//
        public static int ModifierUsager(objUsager usager)
        {
            //requete à utiliser avec les données donnés en params
            string query = "UPDATE [Usager] SET [Password]=?, [AdresseCouriel]=?, [PasswordCouriel]=? WHERE [Nom]=?";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete           
            oledbcmd.Parameters.AddWithValue("@Password", usager.MotdePasse);
            oledbcmd.Parameters.AddWithValue("@AdresseCouriel", usager.AddresseCouriel);
            oledbcmd.Parameters.AddWithValue("@PasswordCouriel", usager.MotdePasseCouriel);
            oledbcmd.Parameters.AddWithValue("@Nom", usager.Nom);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, Modification de l'usager            
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //******************//
        //Suprimer un Usager//
        //******************//
        public static int SuprimerUsager(string nomUsager)
        {
            //requete à utiliser avec les données donnés en params
            string query = "DELETE FROM Usager WHERE ID LIKE @p1";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //paramètres de la requete
            oledbcmd.Parameters.AddWithValue("@p1", nomUsager);

            //Initialiser le vérificateur
            int nbLignes = 0;
            try
            {
                //ouvrir la conection
                oledbcn.Open();

                //exécuter la requete, supression de l'usager
                nbLignes = oledbcmd.ExecuteNonQuery();
            }
            // Gérer l'exception
            catch (OleDbException ex) { throw ex; }

            //fermeture de la conection à la base de donnée
            oledbcn.Close();
            return nbLignes;
        }


        //******************************************//
        //Lister les usager avec leurs mot de passes//
        //******************************************//
        public static List<objUsager> ListerUsagers()
        {
            //requete à utiliser
            string query = "SELECT ID, Nom, Password FROM Usager ORDER BY ID";

            //connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //ouvrir la conection
            oledbcn.Open();

            //exécuter la requete
            OleDbDataReader reader = oledbcmd.ExecuteReader();

            // Création de la liste de retour listUsager
            List<objUsager> listUsager = new List<objUsager> { };

            //mettre chaque usagers dans un objet Usager
            while (reader.Read())
            {
                // Création d'un objet Usager afin d'ajouter à
                // la liste de retour (listUsager)
                objUsager usa = new objUsager((string)reader["ID"], (string)reader["Nom"], (string)reader["Password"]);
                listUsager.Add(usa);
            }

            //fermeture du reader et de la conection à la base de donnée
            reader.Close();
            oledbcn.Close();

            //retour de la liste des usagers         
            return listUsager;
        }


        //******************************//
        //Vérifier si l'usager est admin//
        //******************************//
        public static bool VerifierUsagerAdmin(string ID)
        {
            bool status = false;

            // Définition de la requête, de la connection à la base 
            // de données & Association de la requête avec la connection
            string query = "SELECT Admin FROM Usager WHERE ID = @p1";
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            //initialisation du reader
            OleDbDataReader reader = null;

            //Parametre de la requete
            oledbcmd.Parameters.AddWithValue("@p1", ID);
            try
            {
                // Ouverture de la connection & Exécution de la requête
                oledbcn.Open();
                reader = oledbcmd.ExecuteReader();

                // Verifier si admin ou pas
                if (reader.Read())
                {
                    status = (bool)reader["Admin"];
                }
            }
            catch (OleDbException ex) { throw ex; }

            // Fermeture de la connection à la base de données
            // et fermeture du reader
            oledbcn.Close();
            reader.Close();

            //Retour de la valeur
            if (status)
                return true;
            else
                return false;
        }
    }
}
